package wechat

import (
	"encoding/json"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/logs"
)

type TemplateMeetingNoticeDataValue struct {
	Value string `json:"value"`
}

type TemplateMeetingNoticeData struct {
	First    TemplateMeetingNoticeDataValue `json:"first"`
	Keyword1 TemplateMeetingNoticeDataValue `json:"keyword1"` // 会议主题
	Keyword2 TemplateMeetingNoticeDataValue `json:"keyword2"` // 会议日期
	Keyword3 TemplateMeetingNoticeDataValue `json:"keyword3"` // 会议时间
	Keyword4 TemplateMeetingNoticeDataValue `json:"keyword4"` // 会议地点
	Keyword5 TemplateMeetingNoticeDataValue `json:"keyword5"` // 发起人
	Remark   TemplateMeetingNoticeDataValue `json:"remark"`
}

type TemplateMeetingNotice struct {
	Touser     string                    `json:"touser"`
	TemplateId string                    `json:"template_id"`
	Url        string                    `json:"url"`
	Data       TemplateMeetingNoticeData `json:"data"`
}

type TemplateMeetingNoticeRes struct {
	Errcode int    `json:"errcode"`
	Errmsg  string `json:"errmsg"`
	Msgid   int64  `json:"msgid"`
}

// 发送会议通知
func SendMeetingNotice(openid string, first string, remark string, url string,
	k1 string, k2 string, k3 string, k4 string, k5 string) {
	t := TemplateMeetingNotice{
		Touser:     openid,
		TemplateId: beego.AppConfig.String("meetingnoticeid"),
		Url:        url,
		Data: TemplateMeetingNoticeData{
			First:    TemplateMeetingNoticeDataValue{Value: first},
			Keyword1: TemplateMeetingNoticeDataValue{Value: k1},
			Keyword2: TemplateMeetingNoticeDataValue{Value: k2},
			Keyword3: TemplateMeetingNoticeDataValue{Value: k3},
			Keyword4: TemplateMeetingNoticeDataValue{Value: k4},
			Keyword5: TemplateMeetingNoticeDataValue{Value: k5},
			Remark:   TemplateMeetingNoticeDataValue{Value: remark},
		},
	}
	content, err := json.Marshal(t)
	if err != nil {
		logs.Error("can not marshal meeting notice struct:", err)
		return
	}
	ret := SendTemplateMsg("anban", string(content))
	res := TemplateMeetingNoticeRes{}
	err = json.Unmarshal([]byte(ret), &res)
	if err != nil {
		logs.Error("can not unmarshal send meeting notice response:", err)
		return
	}
	if res.Errcode != 0 {
		logs.Error("send meeting notice fail:", res.Errmsg)
		return
	}
}
